package 二叉树;

import common.TreeNode;

/**
 * @author tmh
 * @date 2024/8/29 22:16
 * @description
 */
public class T114二叉树展开为链表 {
    public void flatten(TreeNode root) {
        //采用迭代的思路
        while (root != null) {
            //如果root的左子树为空，那么root就直接指向root的右子树
            if (root.left == null) {
                root = root.right;
            } else {
                TreeNode pre = root.left;
                //找到pre的最右节点,如果pre的右节点为null，那么pre自己就是最右节点
                while (pre.right != null) {
                    pre=pre.right;
                }
                //让pre的right指向root的right
                pre.right=root.right;
                //让root.right指向root.left
                root.right=root.left;
                //让root.left==null
                root.left=null;
                //root往又节点移动一个位置
                root=root.right;
            }
        }
    }
}
